package javabasics;

import static java.lang.Integer.parseInt;

/**
 *基本类型 大小(字节) 默认值 封装类
 * byte 1 (byte)0 Byte
 * short 2 (short)0 Short
 * int 4 0 Integer
 * long 8 0L Long
 * float 4 0.0f Float
 * double 8 0.0d Double
 * boolean - false Boolean
 * char 2 \u0000(null) Character
 * void - - Void
 *
 *
 * 单的数学计算，使用对象来处理也会引起一些开销，而这些开销对于数学计算本来是毫无必
 * 要的。但是在 java 中，泛型类包括预定义的集合，使用的参数都是对象类型，无法直接使
 * 用这些基本数据类型，所以 java又提供了这些基本类型的包装器。
 * 基本数据类型与其对应的封装类由于本质的不同，具有一些区别：
 * •  基本数据类型只能按值传递，而封装类按引用传递。
 * • 基本类型在堆栈中创建；而对于对象类型，对象在堆中创建，对象的引用在堆栈中
 * 创建。基本类型由于在堆栈中，效率会比较高，但是可能会存在内存泄漏的问题。
 * • 堆中分配空间所需的时间远大于从栈中分配存储空间,所以JAVA速度比C 慢
 * 基本类型所占的存储空间是不变的：这种不变性也是 java 具有可移植性的原因之一。
 * 基本类型是放在栈中，直接存储值。所有数值类型都有正负号，没有无符号的数值类型。
 * 注：
 * 1.int 是基本数据类型，Integer 是 int 的封装类，是引用类型。int 默认值是 0，而
 * Integer默认值是null，所以Integer能区分出0和null的情况。一旦java 看到null，就
 * 知道这个引用还没有指向某个对象，再任何引用使用前，必须为其指定一个对象，否则会报
 * 错。
 * 2.基本数据类型在声明时系统会自动给它分配空间，而引用类型声明时只是分配了引用
 * 空间，必须通过实例化开辟数据空间之后才可以赋值
 * 布尔类型包装器：  Boolean 是封装布尔值的包装器。它定义了下面的的构造方法：
 * Boolean (boolean boolValue);//boolValue 的值必须是true或false；
 * Boolean (String boolString);//boolString 的值为“true”,那么创建的布尔对象为
 * true，否则为false；
 * 为了获得Booolean 对象中的布尔值，可以使用booleanValue()方法；
 *
 *
 * boolean占多少字节呢？ ------boolean类型占了单独使用是4个字节，在数组中又是1个字节。
 * 虽然定义了boolean这种数据类型，但是只对它提供了非常有限的支持。在Java虚
 * 拟机中没有任何供boolean值专用的字节码指令，Java语言表达式所操作的boolean
 * 值，在编译之后都使用Java虚拟机中的int数据类型来代替，而boolean数组将会被编
 * 码成Java虚拟机的byte数组，每个元素boolean元素占8位”。这样我们可以得出
 * boolean类型占了单独使用是4个字节，在数组中又是1个字节。使用int的原因是，对
 * 于当下32位的处理器（CPU）来说，一次处理数据是32位（这里不是指的是32/64位
 * 系统，而是指CPU硬件层面），具有高效存取的特点。
 * 数字类型包装器：
 * 所有数字类型的包装器都是从抽象类 Number 继承下来的。Number 声明了多种以
 * 不同的数字格式返回一个对象值的方法：
 * byte byteValue( );
 * int intValue();.........................
 * 所有的数字类型包装器都提供了一个静态的方法，可以将字符串 转换为自己所封装的
 * 数据类型；例如：
 * static int parseInt(String s  );
 * */
public class BasicDataTypes {
    public static void main(String[] args) {
        int b;
//        b.parseInt("j");
        System.out.printf(""+parseInt("10"));//alt+enter选择转换的类型
    }

}
